import pandas as pd
import numpy as np

df = pd.read_csv('F:/25MCM_C/C_data/merged1.csv', encoding='latin1')
df.columns = df.columns.str.upper().str.strip()

# 1) 基于 Medal 列来提取行级 mgold, msilver, mbronze
def medal_to_counts(m):
    m = str(m).strip().upper()
    if m == "GOLD":
        return (1,0,0)
    elif m == "SILVER":
        return (0,1,0)
    elif m == "BRONZE":
        return (0,0,1)
    else:
        return (0,0,0)
#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216
df[['MGOLD','MSILVER','MBRONZE']] = df['MEDAL'].apply(lambda x: pd.Series(medal_to_counts(x)))

# 2) 按 (NOC, YEAR, SPORT)分组, 聚合 mgold, msilver, mbronze, host
grouped = df.groupby(['NOC','YEAR','SPORT'], as_index=False).agg({
    'MGOLD':'sum',
    'MSILVER':'sum',
    'MBRONZE':'sum',
    'HOST':'first'  # 取本组中的第一个host(同一年)
})
# 重命名
grouped.rename(columns={'MGOLD':'GOLD','MSILVER':'SILVER','MBRONZE':'BRONZE'}, inplace=True)
# 计算 MEDALS
grouped['MEDALS'] = grouped['GOLD'] + grouped['SILVER'] + grouped['BRONZE']#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216

print(grouped.head(20))

# 3) 现在看看 G/S/B col 是否有非零
print("Sum of gold:", grouped['GOLD'].sum())
print("Sum of silver:", grouped['SILVER'].sum())
print("Sum of bronze:", grouped['BRONZE'].sum())

# 4) 后续 => modeling or analysis
grouped.to_csv('grouped_result.csv', index=False)
print("Saved grouped_result.csv with aggregated medals.")
#比赛结束前最后一天售后群发布无水印可视化结果+无标注代码【可直接提交】为了防止倒卖， 论文写作过程中遗留数个致命问题，无关代码，该问题解决方式仅在官网授权售后群答疑，盗卖方式购买资料不提供答疑，感谢理解 美赛资料助攻购买链接+说明https://docs.qq.com/doc/p/f3dc6bffbf4dab58dbdfd3e5e5de18a2ad974216